package com.yueyang.sojourn.server.config;

import com.alibaba.ttl.TransmittableThreadLocal;
import com.yueyang.uc.model.UcLoginUserV1;

public class AppUtil {
  private static ThreadLocal<UcLoginUserV1> userVoThreadLocal = new TransmittableThreadLocal<>();

  /**
   * 从当前线程获取用户ucid，16位的长整数，如果当前线程没有，则返回-1
   *
   * @return
   */
  public static Long getUcid() {
    if (userVoThreadLocal.get() != null) {
      return userVoThreadLocal.get().getId();
    }
    return null;
  }

  /**
   * 从当前线程获取用户ucid，16位的长整数，如果当前线程没有，则返回-1
   *
   * @return
   */
  public static UcLoginUserV1 getLoginUser() {
    if (userVoThreadLocal.get() != null) {
      return userVoThreadLocal.get();
    }
    return null;
  }

  /**
   * 设置当前线程，一般在用户请求入口处设置
   *
   * @param userVO
   */
  public static void setUseToThread(UcLoginUserV1 userVO) {
    userVoThreadLocal.set(userVO);
  }

  /**
   * 把当前线程中的用户信息清除，也可以不适用，但为了内存能更快的回收，尽可能的手动释放
   */
  public static void removeUserFromThread() {
    userVoThreadLocal.remove();
    userVoThreadLocal.set(null);
  }
}
